package com.Spring.Service;

import com.Spring.DAO.AlumnoDAO;
import com.Spring.DAO.HistorialDAO;
import com.Spring.DAO.AsignaturaDAO;
import com.Spring.DAO.exceptions.NonexistentEntityException;
import com.Spring.Model.Alumno;
import com.Spring.Model.Asignatura;
import com.Spring.Model.Historial;
import java.util.List;
import javax.inject.Named;
import javax.enterprise.context.ApplicationScoped;
import javax.faces.bean.ManagedBean;


@ManagedBean
@Named(value = "numeroInscripcion")
@ApplicationScoped
public class NumeroInscripcion {
    int cuenta;
    double prom;
    int credito;
    int cont = 1;
    double sumcalif;
    double indice;
    
    /**constructor */
    public NumeroInscripcion() {
    }
    
public String genera () {
    //extraer el promedio
    {
    AlumnoDAO dal = new AlumnoDAO();
    List<Alumno> listaal =dal.findAlumnoEntities();
    NumeroInscripcion ni[]=new NumeroInscripcion[listaal.size()];
    //Llnando table
       for(int i = 0; i < listaal.size(); i++){
        
        ni[i]=ni[i].Llenado(listaal.get(i).getNoCuenta());
      }
    ni=ni[0].ordena(ni);
    
    return"todo se realizo bien";
     }

    }

public NumeroInscripcion[] ordena (NumeroInscripcion[] ni) {
                NumeroInscripcion aux;
		int n=ni.length;
		//System.out.println("el tamaño es "+n);
		for(int i=n-1; i>=0;i--)
		  {
			for (int j=0; j<i ; j++)
			   {
				if(ni[j].indice>ni[j+1].indice)
				  {
				    aux =ni[j];
				    ni[j]=ni[j+1];
				    ni[j+1]=aux;
				  }
			   }
		   }
		return(ni);
	   }

public double promedio (int cuenta){
//consultando a la base
    Alumno albd = new Alumno();
    AlumnoDAO da = new AlumnoDAO();
    albd = da.read(cuenta);
    if (albd==null)
        return -1;
    return albd.getPromedio();    
} 
public NumeroInscripcion Llenado(int cuenta){
    Asignatura as = new Asignatura();
    AsignaturaDAO das = new AsignaturaDAO();
    int sumador = 0;
    double SumCalif =0;
    List<Historial> listaH = das.getAsignaturaCreditos(cuenta);
    NumeroInscripcion ni = new NumeroInscripcion();
    for(int i = 0; i < listaH.size(); i++){
                if(listaH.get(i).getEstado() == 4){
                    as = das.read(listaH.get(i).getHistorialPK().getIdAsignatura());
                    sumador += as.getCreditos() ;
                    SumCalif += listaH.get(i).getPromedio();
                }
            }
    ni.cuenta=cuenta;
    ni.credito=sumador;
    ni.sumcalif=SumCalif;
    ni.prom=ni.promedio(cuenta);
    ni.indice=(ni.prom*ni.credito*ni.sumcalif)/3;
    return ni;
}
public int Calificacion (int cuenta){
    Asignatura as = new Asignatura();
    AsignaturaDAO das = new AsignaturaDAO();
    int sumador = 0;
    List<Historial> listaH = das.getAsignaturaCreditos(cuenta);
    for(int i = 0; i < listaH.size(); i++){
                if(listaH.get(i).getEstado() == 4){
                    as = das.read(listaH.get(i).getHistorialPK().getIdAsignatura());
                    sumador += as.getCreditos() ;
                    cont++;
                }
            }
    return sumador;
}
/*  public void AsignaNI (NumeroInscripcion[] ni) throws NonexistentEntityException, Exception{
  int n=ni.length;
  Alumno albd =new Alumno();
  DAOAlumno da= new DAOAlumno();
  for(int i=0;i<n;i++){
      albd=da.read(ni[i].cuenta);
      albd.setNumeroInscripcion(i+1);
      da.update(albd);
                     }
  } */ 
//Falta núumero de inscripción en la base de datos
public String ImprimeNI (NumeroInscripcion[] ni, int i){
    if(ni.length == i)
        return "";
    return ni[i].cuenta + " " + ni[i].indice + " \n" + ImprimeNI(ni, i+1);

}
}